//查
const User = require("../models/user");
const Class = require("../models/class");
/*
    单表查询
    find({}) // 查找所有的数据
    findOne({username:"wangwu"}) //利用唯一标识符 查找一个数据 返回是一个Json对象
    find({age:"18"})   //查找年龄为18的所有数据  返回是一个数组

    条件查询
    mongoose查询条件其实就是在find方法的基础上添加mongodb条件操作符，
    如Thing.find().gt('age', 21)就等同于Thing.find({age: {$gt: 21}})，
*/

//简单条件查询

// toSearch();
async function toSearch(){
    try{
        let searchUser = await User.find({age:{$gt:18}});
        // let searchUser = await User.find({age:{$gte:18}});
        console.log(searchUser);
    }catch(err){
        console.log(err.message)
    }
}

//查找子文档
/*
    {"skill.skillName":"java"}  //找到子文档
*/
// toSearchChild();

async function toSearchChild(){
    try{
        let searchUser = await User.find({"skill.skillName":"java"});  
        // let searchUser = await User.find({"skill.skillTime":{$gt:7}});
        console.log(searchUser);
    }catch(err){
        console.log(err.message)
    }    
}

//多表查询
/*
    场景：
        对象：用户   班级
        要求：每个用户都有自己的编程技能  根据自己的编程技能 在班级表中找到需要买哪些书

    --方法：
        1.找到该用户掌握哪些编程技能
        2.再到班级表中找到相应的需要购买的书籍
*/
toSearchBook();
async function toSearchBook(){
    try{
        let skillBooks=[];
        //1.找到用户的掌握的技能
        let user= await User.findOne({username:"zhangsan"});
        let userSkils =user.skill;

        //2.遍历技能找到对应的班级
        for(let i of userSkils){
            let userClass = await Class.findOne({className:i.skillName})
            if(!!userClass){
                //班级存在的时候  遍历班级中需要的书籍
                for(let j of userClass.classBooks){
                    skillBooks.push(j.bookName)
                }
            }            
        }
        console.log(`skillBooks=${skillBooks}`);
    }catch(err){
        console.log(err.message);
    }
}